NIUHE

日々私たちが过ごしている日常というのは、実は奇迹の连続なのかもしれんな

Wireshark 抓包指南

Wireshark 介绍

Wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。 官方下载地址

Wireshark 开始抓包

ps:在Linux上运行Wireshark抓包可能会遇到权限问题,解决方案可以参考这里

开始界面:

选择你正在用的网卡,然后点菜单中的鲨鱼图标就可以进行抓包了!

Wireshark 窗口介绍

WireShark 主要分为这几个界面

  1. Display Filter(显示过滤器), 用于过滤

  2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。 颜色不同,代表

  3. Packet Details Pane(封包详细信息), 显示封包中的字段

  4. Dissector Pane(16进制数据)

  5. Miscellanous(地址栏,杂项)

Wireshark 过滤器

Wireshark有两种过滤器,分别是显示过滤器捕捉过滤器

区别 * 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。 * 显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。

两种过滤器的目的是不同的。 * 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。 * 显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。

捕捉过滤器

  • Protocol(协议): 可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 如果没有特别指明是什么协议,则默认使用所有支持的协议。

  • Direction(方向): 可能的值: src, dst, src and dst, src or dst 如果没有特别指明来源或目的地,则默认使用 src or dst 作为关键字。 例如, host 10.2.2.2src or dst host 10.2.2.2 是一样的。

  • Host(s): 可能的值: net, port, host, portrange. 如果没有指定此值,则默认使用host关键字。 例如,src 10.1.1.1src host 10.1.1.1相同。

  • Logical Operations(逻辑运算): 可能的值:not, and, or. 否(not)具有最高的优先级。或(or)和与(and)具有相同的优先级,运算时从左至右进行。 例如, not tcp port 3128 and tcp port 23(not tcp port 3128) and tcp port 23相同。 not tcp port 3128 and tcp port 23not (tcp port 3128 and tcp port 23)不同。

例子: * tcp dst port 3128 //捕捉目的TCP端口为3128的封包。 * ip src host 10.1.1.1 //捕捉来源IP地址为10.1.1.1的封包。 * host 10.1.2.3 //捕捉目的或来源IP地址为10.1.2.3的封包。 * ether host e0-05-c5-44-b1-3c //捕捉目的或来源MAC地址为e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外网通讯的数据包时,可以将这里的mac地址换成路由的mac地址即可。 * src portrange 2000-2500 //捕捉来源为UDP或TCP,并且端口号在20002500范围内的封包。 * not imcp //显示除了icmp以外的所有封包。(icmp通常被ping工具使用) * src host 10.7.2.12 and not dst net 10.200.0.0/16 //显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。 * (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8 //捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在20010000之间,并且目的位于网络 10.0.0.0/8内的所有封包。 * src net 192.168.0.0 mask 255.255.255.0 //捕捉源地址为192.168.0.0网络内的所有封包。

显示过滤器

实例:

过滤表达式的规则

表达式规则

  1. 协议过滤 比如TCP,只显示TCP协议。

  2. IP 过滤 比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102, ip.dst==192.168.1.102, 目标地址为192.168.1.102

  3. 端口过滤 tcp.port ==80, 端口为80的 tcp.srcport == 80, 只显示TCP协议的愿端口为80的。

  4. Http模式过滤 http.request.method=="GET", 只显示HTTP GET方法的。

封包列表

封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。

你也可以修改这些显示颜色的规则, View ->Coloring Rules.

详细信息

这个面板是我们最重要的,用来查看协议中的每一个字段。

各行信息分别为 * Frame: 物理层的数据帧概况 * Ethernet II: 数据链路层以太网帧头部信息 * Internet Protocol Version 4: 互联网层IP包头部信息 * Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP * Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

对应的OSI七层模型

TCP 包解析

从下图可以看到wireshark捕获到的TCP包中的每个字段。

TCP 三路握手分析

三路握手的过程为:

我们用wireshark实际分析下三次握手的过程

打开wireshark, 开始抓包后打开浏览器输入 http://www.liuhe.website

在wireshark中输入http过滤, 然后选中Destination为139.129.38.159GET / HTTP/1.1的那条记录,右键然后点击 “对话过滤器->TCP”.

这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。客户端把这段连接的序号设定为随机数A

第二次握手 服务器端应当为一个合法的SYN回送一个SYN/ACKACK 的确认码应为 A+1SYN/ACK 包本身又有一个随机序号 B

第三次握手 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1

就这样通过了TCP三次握手,建立了连接。

参考

Wireshark基本介绍和学习TCP三次握手

Wireshark抓包工具使用教程以及常用抓包规则

Powered by Hexo and Theme by Hacker
© 2019 NIUHE